package com.hedl.practice.diyJava.genericity.definition_genericty;

//定义泛型

/**
 * 在类后面可以定义多个泛型，用","隔开
 * @param <T>
 */
public class Pair<T> {
    private T first;
    private T last;

    public Pair(T first, T last) {
        this.first = first;
        this.last = last;
    }

    public T getFirst() {
        return first;
    }

    public T getLast() {
        return last;
    }

    public void setFirst(T first) {
        this.first = first;
    }

    public void setLast(T last) {
        this.last = last;
    }

    //对静态方法使用<T>会报错

    /**
     * 这个static<T>和Pair<T>类型的<T>已经没有任何关系了;
     * 对于静态方法，我们可以单独改写为“泛型”方法，只需要使用另一个类型即可;
     * 对于上面的create()静态方法，我们应该把它改为另一种泛型类型;
     * 清楚地将静态方法的泛型类型和实例类型的泛型类型区分开。
     * @param first
     * @param last
     * @return
     * @param <K>
     */
    /*public static<K> Pair<K> create(K first,K last){
        return new Pair<K>(first,last);
    }*/
}

//泛型继承
class IntPair extends Pair<Integer>{
    public IntPair(Integer first, Integer last) {
        super(first, last);
    }
}
